package com.jmrapp.terralegion.engine.views.drawables; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.Texture.TextureFilter; import com.badlogic.gdx.graphics.g2d.BitmapFont; import com.badlogic.gdx.graphics.g2d.Sprite; import com.badlogic.gdx.graphics.g2d.TextureAtlas; import com.badlogic.gdx.graphics.g2d.freetype.FreeTypeFontGenerator; import java.util.HashMap; import java.util.Iterator; import java.util.Map; public class ResourceManager { private static ResourceManager instance = new ResourceManager(); private final HashMap<String, Sprite> sprites = new HashMap<String, Sprite>(); private final HashMap<String, Texture> textures = new HashMap<String, Texture>(); private final HashMap<String, BitmapFont> fonts = new HashMap<String, BitmapFont>(); private final HashMap<String, Drawable> drawables = new HashMap<String, Drawable>(); private ResourceManager() { } public void loadTexture(String id, String file) { Texture t = new Texture(Gdx.files.internal(file)); t.setFilter(TextureFilter.Linear, TextureFilter.Nearest); textures.put(id, t); } public Sprite loadSprite(String id, String file) { Sprite sprite = new Sprite(new Texture(Gdx.files.internal(file))); sprite.getTexture().setFilter(TextureFilter.Linear, TextureFilter.Nearest); sprites.put(id, sprite); return sprite; } public void loadTexturedDrawable(String id, String file) { Texture t = new Texture(Gdx.files.internal(file)); t.setFilter(TextureFilter.Linear, TextureFilter.Nearest); drawables.put(id, new TexturedDrawable(t)); } public void loadAtlasRegionDrawable(String id, TextureAtlas atlas, String region) { TextureAtlas.AtlasRegion atlasRegion = atlas.findRegion(region); drawables.put(id, new AtlasRegionDrawable(atlasRegion)); } public Sprite loadSprite(String id, String file, float scaleX, float scaleY) { Sprite sprite = new Sprite(new Texture(Gdx.files.internal(file))); sprite.getTexture().setFilter(TextureFilter.Linear, TextureFilter.Nearest); sprite.setScale(scaleX, scaleY); sprite.setOrigin(0, 0); sprites.put(id, sprite); return sprite; } public void loadFont(String id, String fileFNT, String filePNG, Color color, float scale) { fonts.put(id, getFont(id, fileFNT, filePNG, color, scale)); } public void loadFont(String id, String file, Color color, int size) { fonts.put(id, getFont(id, file, color, size)); } public BitmapFont getFont(String id, String fileFNT, String filePNG, Color color, float scale) { BitmapFont font = new BitmapFont(Gdx.files.internal(fileFNT),Gdx.files.internal(filePNG),false); font.setColor(color); font.setScale(scale); return font; } public BitmapFont getFont(String id, String file, Color color, int size) { FreeTypeFontGenerator gen = new FreeTypeFontGenerator(Gdx.files.internal(file)); BitmapFont font = gen.generateFont(size); font.setColor(color); font.getRegion().getTexture().setFilter(TextureFilter.Linear, TextureFilter.Linear); return font; } public void loadFont(String id, BitmapFont font) { fonts.put(id, font); } public BitmapFont getFont(String id) { return fonts.get(id); } public Texture getTexture(String id) { return textures.get(id); } public Drawable getDrawable(String id) { return drawables.get(id); } public Sprite getSprite(String id) { return sprites.get(id); } public void dispose() { Iterator it = textures.entrySet().iterator(); while (it.hasNext()) { Map.Entry pair = (Map.Entry)it.next(); ((Texture)pair.getValue()).dispose(); it.remove(); // avoids a ConcurrentModificationException } it = fonts.entrySet().iterator(); while (it.hasNext()) { Map.Entry pair = (Map.Entry)it.next(); ((BitmapFont)pair.getValue()).dispose(); it.remove(); // avoids a ConcurrentModificationException } } public static ResourceManager getInstance() { return instance; } }